/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Clases;

/**
 *
 * @author Daniel
 */
import static com.sun.corba.se.spi.presentation.rmi.StubAdapter.request;
import static com.sun.org.apache.xalan.internal.lib.ExsltDatetime.date;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import static javax.print.attribute.Size2DSyntax.MM;
import javax.servlet.http.HttpSession;
import static org.apache.taglibs.standard.lang.jstl.test.StaticFunctionTests.add;


public class AlquilerSalones {

    private int idAlquilerSalon;
    private int idSocio;
    private int NroSocio;
    private String TipoEv;
    private Date FechaRes;    
    private Date FechaPago;    
    private String Doc;   
    private String denominacion;
    private String TelPar;
    private String TelCel;
    private String Email;
    private String Socio;
    private String TipoOper;
    private String Salon;
    private Double monto;
    private int status;
    private String Estado;
    private Date FechaEvento;
    private int Soc;
    private Date FechaCanc;    

    public Date getFechaCanc() {
        return FechaCanc;
    }

    public void setFechaCanc(Date FechaCanc) {
        this.FechaCanc = FechaCanc;
    }

    public Date getFechaEvento() {
        return FechaEvento;
    }

    public void setSoc(int Soc) {
        this.Soc = Soc;
    }

    public int getSoc() {
        return Soc;
    }

    public void setFechaEvento(Date FechaEvento) {
        this.FechaEvento = FechaEvento;
    }


    public void setEstado(String Estado) {
        this.Estado = Estado;
    }

    public String getEstado() {
        return Estado;
    }

    public int getIdAlquilerSalon() {
        return idAlquilerSalon;
    }

    public void setIdAlquilerSalon(int idAlquilerSalon) {
        this.idAlquilerSalon = idAlquilerSalon;
    }

    public void setIdSocio(int idSocio) {
        this.idSocio = idSocio;
    }

    public void setMonto(Double monto) {
        this.monto = monto;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getSocio() {
        return Socio;
    }

    public Double getMonto() {
        return monto;
    }

    public int getStatus() {
        return status;
    }

    public void setNroSocio(int NroSocio) {
        this.NroSocio = NroSocio;
    }

    public void setTipoEv(String TipoEv) {
        this.TipoEv = TipoEv;
    }

    public void setFechaRes(Date FechaRes) {
        this.FechaRes = FechaRes;
    }

    public void setFechaPago(Date FechaPago) {
        this.FechaPago = FechaPago;
    }

    public void setDoc(String Doc) {
        this.Doc = Doc;
    }

    public void setDenominacion(String denominacion) {
        this.denominacion = denominacion;
    }

    public void setTelPar(String TelPar) {
        this.TelPar = TelPar;
    }

    public void setTelCel(String TelCel) {
        this.TelCel = TelCel;
    }

    public void setEmail(String Email) {
        this.Email = Email;
    }

    public void setSocio(String Socio) {
        this.Socio = Socio;
    }

    public void setTipoOper(String TipoOper) {
        this.TipoOper = TipoOper;
    }

    public void setSalon(String Salon) {
        this.Salon = Salon;
    }

    public void setmonto(double monto) {
        this.monto = monto;
    }

    public int getIdSocio() {
        return idSocio;
    }

    public int getNroSocio() {
        return NroSocio;
    }

    public String getTipoEv() {
        return TipoEv;
    }

    public Date getFechaRes() {
        return FechaRes;
    }

    public Date getFechaPago() {
        return FechaPago;
    }

    public String getDoc() {
        return Doc;
    }

    public String getDenominacion() {
        return denominacion;
    }

    public String getTelPar() {
        return TelPar;
    }

    public String getTelCel() {
        return TelCel;
    }

    public String getEmail() {
        return Email;
    }

    public boolean isSocio() {
        if (Socio.equals("1")) return true;
        return false;
    }

    public String getTipoOper() {
        return TipoOper;
    }

    public String getSalon() {
        return Salon;
    }

    public double getmonto() {
        return monto;
    }

    public AlquilerSalones() { }  
 
    
    public List buscarEventos(String s, int f)  
    {
        int status = 1;
        int mes = 0;
        String salo = null;
        Date fechanu = null;       
        List ev = new ArrayList();        
        Connection miCnx = ConectarBD.getConnection();
        ResultSet miRs = null;       
        String query = "SELECT * FROM alquilersalon WHERE Salon=? and month(FechaEvento)=? "  ;
      
        try{
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
             miStm.setString(1, s);
             miStm.setInt(2, f);             
            miRs = miStm.executeQuery();
            while(miRs.next()) { 
              AlquilerSalones eventos = new AlquilerSalones(); 

              salo = NormSalon(miRs.getString("Salon"));
              eventos.setSalon(salo); 
              eventos.setIdAlquilerSalon(miRs.getInt("idAlquilerSalon"));  
              eventos.setIdSocio(miRs.getInt("idSocio"));                
              eventos.setDoc(miRs.getString("DNI"));  
              eventos.setDenominacion(miRs.getString("denominacion"));
              eventos.setFechaEvento(miRs.getDate("FechaEvento"));              
              eventos.setTipoEv(miRs.getString("TipoEv"));
              eventos.setmonto(miRs.getDouble("Monto"));

              if (miRs.getInt("Socio")==0){
                  eventos.setSocio("Socio");
              }else {
                  eventos.setSocio("No Socio");
              }
              eventos.setTelPar(miRs.getString("TelPar"));
              eventos.setTelCel(miRs.getString("TelCel"));             
              eventos.setEmail(miRs.getString("Email"));
              eventos.setFechaRes(miRs.getDate("FechaReserva"));              
              eventos.setEstado(miRs.getString("Estado"));
              eventos.setStatus(status);              
              ev.add(eventos);
          }
            miRs.close();
        }catch (SQLException ex) {status = 2;}
       return ev;
    }

    public List busEvPers(String s)  
    {
        int status = 1;     
        List ev = new ArrayList();        
        Connection miCnx = ConectarBD.getConnection();
        ResultSet miRs = null;       
        String query = "SELECT * FROM alquilersalon WHERE DNI=?"  ;
      
        try{
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
             miStm.setString(1, s);             
            miRs = miStm.executeQuery();
            while(miRs.next()) { 
              AlquilerSalones eventos = new AlquilerSalones(); 

              eventos.setSalon(miRs.getString("Salon")); 
              eventos.setIdAlquilerSalon(miRs.getInt("idAlquilerSalon"));  
              eventos.setIdSocio(miRs.getInt("idSocio"));                
              eventos.setDoc(miRs.getString("DNI"));  
              eventos.setDenominacion(miRs.getString("denominacion"));
              eventos.setFechaEvento(miRs.getDate("FechaEvento"));              
              eventos.setTipoEv(miRs.getString("TipoEv"));
              eventos.setmonto(miRs.getDouble("Monto"));

              if (miRs.getInt("Socio")==0){
                  eventos.setSocio("Socio");
              }else {
                  eventos.setSocio("No Socio");
              }
              eventos.setTelPar(miRs.getString("TelPar"));
              eventos.setTelCel(miRs.getString("TelCel"));             
              eventos.setEmail(miRs.getString("Email"));
              eventos.setFechaRes(miRs.getDate("FechaReserva"));
              eventos.setFechaPago(miRs.getDate("FechaPago"));
              eventos.setEstado(miRs.getString("Estado"));
              eventos.setStatus(status);              
              ev.add(eventos);
          }
            miRs.close();
        }catch (SQLException ex) {status = 2;}
       return ev;
    }
    
    public List<AlquilerSalones> busEvent(int ida)  
    {
        int status = 0;     
        List<AlquilerSalones> ev = new ArrayList(); 
        java.sql.Date fechaCanc = null;   
        
        Connection miCnx = ConectarBD.getConnection();
        ResultSet miRs = null;       
        String query = "SELECT * FROM alquilersalon WHERE idAlquilerSalon=? "  ;
        
       String Estado = "Cancelada"; 
       Date date = new Date();
       fechaCanc = new java.sql.Date(date.getTime());      
        try{
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, ida);             
            miRs = miStm.executeQuery();
            while(miRs.next()) { 
              AlquilerSalones eventos = new AlquilerSalones(); 
              status = 1;
              eventos.setSalon(miRs.getString("Salon")); 
              eventos.setIdAlquilerSalon(miRs.getInt("idAlquilerSalon"));  
              eventos.setIdSocio(miRs.getInt("idSocio"));                
              eventos.setDoc(miRs.getString("DNI"));  
              eventos.setDenominacion(miRs.getString("denominacion"));
              eventos.setFechaEvento(miRs.getDate("FechaEvento"));              
              eventos.setTipoEv(miRs.getString("TipoEv"));
              eventos.setmonto(miRs.getDouble("Monto"));
              eventos.setSoc(miRs.getInt("Socio"));
              eventos.setTelPar(miRs.getString("TelPar"));
              eventos.setTelCel(miRs.getString("TelCel"));             
              eventos.setEmail(miRs.getString("Email"));
              eventos.setFechaRes(miRs.getDate("FechaReserva"));
              eventos.setFechaPago(miRs.getDate("FechaPago"));              
              eventos.setEstado(miRs.getString("Estado"));
              eventos.setFechaCanc(fechaCanc);              
              eventos.setStatus(status);              
              ev.add(eventos);
          }
            miRs.close();
        }catch (SQLException ex) {status=2;}
       return ev;
    }
    
    public int insertarReserva(int idSocio, String salon, String FechaEv, String doc, String soc, String tipev, String denom, String telp, String telc, String mail) {      

        int status = 0;
        int socio = 1; 
        String est = null;
        double monto = 0.0;
        Date fecha = null;
        java.sql.Date fechaEvent = null;
        java.sql.Date fechaReserva = null;        
        String TipoEvento = NormEvento(tipev);
        PreparedStatement miStm = null;
        
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");        
        String strFecha = FechaEv;
        try {
            fecha = formatter.parse(strFecha);
            fechaEvent = new java.sql.Date(fecha.getTime());             
            } catch (ParseException ex) {ex.printStackTrace();}   
    
            Date date = new Date();
            fechaReserva = new java.sql.Date(date.getTime());         

        java.sql.Date fechaPago = null;       
        est = "Reservado";
        
        if (soc.equals("1")){
            socio = 0;
        }else if (soc.equals("2")){
            socio = 1;
        }

        String query = "INSERT INTO AlquilerSalon (idSocio, Salon, TipoEv, DNI, Denominacion, TelPar, TelCel, Email, FechaEvento, FechaReserva, FechaPago, Estado, Socio, Monto) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        Connection miCnx = ConectarBD.getConnection();
        try {             
                miStm = (PreparedStatement) miCnx.prepareStatement(query);
                miStm.setInt(1, idSocio);
                miStm.setString(2, salon);
                miStm.setString(3, TipoEvento);                
                miStm.setString(4, doc);
                miStm.setString(5, denom);
                miStm.setString(6, telp);
                miStm.setString(7, telc); 
                miStm.setString(8, mail);
                miStm.setDate(9, fechaEvent); 
                miStm.setDate(10, fechaReserva);                
                miStm.setDate(11, fechaPago);               
                miStm.setString(12, est);                
                miStm.setInt(13, socio);
                miStm.setDouble(14, monto);    
                status = miStm.executeUpdate();
            } catch (SQLException ex) {
                status=2;            
            }        
        return status;
        }

    //public int insertarCancelaciones(int idAlq, int idSocio, String salon, Date fEv, String doc, int soc, String tipev, String denom, String telp, String telc, String mail, Double monto, Date fRes, Date fPago, Date fCan) throws SQLException{      
    public int insertarCancelaciones(List<AlquilerSalones> listaEvent)throws SQLException{
        int status = 0;
        int status1 = 0; 
        String est = null;
        java.sql.Date sqlDate = null;
        java.sql.Date sqlDate1 = null;
        java.sql.Date sqlDate2 = null;
        java.sql.Date sqlDate3 = null;        
        est = "Cancelado";
        PreparedStatement miStm = null;
        PreparedStatement miStm1 = null;        
        
        sqlDate = new java.sql.Date(listaEvent.get(0).getFechaEvento().getTime());        
        sqlDate1 = new java.sql.Date(listaEvent.get(0).getFechaRes().getTime());
        if (listaEvent.get(0).getFechaPago()!=null){
         sqlDate2 = new java.sql.Date(listaEvent.get(0).getFechaPago().getTime());
        }else
        sqlDate3 = new java.sql.Date(listaEvent.get(0).getFechaCanc().getTime()); 
        
        String query = "INSERT INTO CancelarAlquilerSalon (idAlquilerSalon, idSocio, Salon, TipoEv, DNI, Denominacion, TelPar, TelCel, Email, FechaEvento, FechaReserva, FechaPago, FechaCancelacion, Estado, Socio, Monto) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        String query1 = "Delete from AlquilerSalon where idAlquilerSalon=?";
        Connection miCnx = ConectarBD.getConnection();
        try {   
                miCnx.setAutoCommit(false);            
                miStm = (PreparedStatement) miCnx.prepareStatement(query);
                miStm1 = (PreparedStatement) miCnx.prepareStatement(query1);
                miStm.setInt(1, listaEvent.get(0).getIdAlquilerSalon());
                miStm.setInt(2, listaEvent.get(0).getIdSocio());
                miStm.setString(3, listaEvent.get(0).getSalon());
                miStm.setString(4, listaEvent.get(0).getTipoEv());                
                miStm.setString(5, listaEvent.get(0).getDoc());
                miStm.setString(6, listaEvent.get(0).getDenominacion());
                miStm.setString(7, listaEvent.get(0).getTelPar());
                miStm.setString(8, listaEvent.get(0).getTelCel()); 
                miStm.setString(9, listaEvent.get(0).getEmail());
                miStm.setDate(10, sqlDate); 
                miStm.setDate(11, sqlDate1);                
                miStm.setDate(12, sqlDate2);
                miStm.setDate(13, sqlDate3);                
                miStm.setString(14, est);                
                miStm.setInt(15, listaEvent.get(0).getSoc());
                miStm.setDouble(16, listaEvent.get(0).getmonto());    
                status = miStm.executeUpdate();
                
                miStm1.setInt(1, listaEvent.get(0).getIdAlquilerSalon());
                status1 = miStm1.executeUpdate();                
                miCnx.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            if (miCnx != null) {
                try {
                    System.err.print("La transacción se deshace.");
                    status = 2;
                    miCnx.rollback();
                } catch (SQLException excep) {
                   e.printStackTrace();
                }
            }
        } finally {
            if (miStm != null) {
                miStm.close();
            }
            if (miStm1 != null) {
                miStm.close();
            }
            miCnx.setAutoCommit(true);
        }      
        return status;
        }
    
    public int insertarEvEspeciales(String salon, String FechaIn, String FechaFin, String est) {      

        int status = 0;
        int i = 0;
        Date fecha = null;
        Date fe = null;
        String tipEv = null;
        java.sql.Date fechaInicio = null;
        java.sql.Date fechaFin = null;  
        java.sql.Date fechaReserva = null;         
        String estado = NormEvento(est);
        PreparedStatement miStm = null;
        
        fechaInicio = convertir(FechaIn);
        
        fechaFin = convertir(FechaFin);
        
            if (fechaFin==null){
                fechaFin = fechaInicio;
            }
            
            fe = sumaDias(fechaFin);
            fechaFin = new java.sql.Date(fe.getTime());  
            Date date = new Date();
            fechaReserva = new java.sql.Date(date.getTime());       
       
        if (est.equals("1")){
            tipEv = "Mantenimiento";
            estado = "Mantenimiento";
        }else if (est.equals("2")){
            tipEv = "Reserva C.D.";
            estado = "Reserva_CD";
        }       

        String query = "INSERT INTO AlquilerSalon (Salon, TipoEv, FechaEvento, FechaReserva, Estado) VALUES (?,?,?,?,?)";
        Connection miCnx = ConectarBD.getConnection();
        try { 
            while (fechaInicio.before(fechaFin)){  
                miStm = (PreparedStatement) miCnx.prepareStatement(query);
                miStm.setString(1, salon);
                miStm.setString(2, tipEv);
                miStm.setDate(3, fechaInicio); 
                miStm.setDate(4, fechaReserva);                            
                miStm.setString(5, estado);                  
                status = miStm.executeUpdate();
                fe = sumaDias(fechaInicio);
                fechaInicio = new java.sql.Date(fe.getTime()); 
            }
            } catch (SQLException ex) {status=2;}        
        return status;
        }    

public static java.sql.Date convertir(String fe){
    Date fecon = null;
    java.sql.Date fecha = null;
    
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");           
        try {
            fecon = formatter.parse(fe);
            fecha = new java.sql.Date(fecon.getTime()); 
            } catch (ParseException ex) {ex.printStackTrace();}
        return fecha;
}

public static Date sumaDias(Date fecha){ 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(fecha); 
    cal.add(Calendar.DAY_OF_YEAR, 1); 
return cal.getTime(); 
}     
    public int confirmarReserva(int idalq){      

        int status = 0;
        String est = "Confirmada";
 
            String query = "UPDATE AlquilerSalon Set Estado=? where idAlquilerSalon=?";   
            Connection miCnx = ConectarBD.getConnection();
            try {   
                PreparedStatement miStm = miCnx.prepareStatement(query); 
                miStm.setString(1, est);
                miStm.setInt(2, idalq); 
                status = miStm.executeUpdate();
            } catch (SQLException ex) {
               status = 2;
            }
        return status;
        } 
    
    public int modificarDatosRes(int idalq, String tpart, String tcel, String mail){      

        int status = 0;
 
            String query = "UPDATE AlquilerSalon Set TelPar=?, TelCel=?, Email=? where idAlquilerSalon=?";   
            Connection miCnx = ConectarBD.getConnection();
            try {   
                PreparedStatement miStm = miCnx.prepareStatement(query); 
                miStm.setString(1, tpart);                
                miStm.setString(2, tcel);                
                miStm.setString(3, mail);
                status = miStm.executeUpdate();
            } catch (SQLException ex) {
               status = 2;
            }
        return status;
        }   
    
    public String NormEvento(String e){
       
        String ev = "";
        
        if ("1".equals(e)) {
            ev = "Casamiento / Fiesta Cumpleaños";
        }

        if ("2".equals(e)) {
            ev = "Almuerzo 5 Horas";
        }      
        
        if ("3".equals(e)) {
            ev = "Almuerzo 3,5 Horas";
        }  
        
        if ("4".equals(e)) {
            ev = "Cena 5 Horas";
        }  
  
        if ("5".equals(e)) {
            ev = "Cena 3,5 Horas";
        }         
        
        if ("6".equals(e)) {
            ev = "Convenciones (Medio Día)";
        }         

        if ("7".equals(e)) {
            ev = "WorkShop (Día Completo)";
        }        
        return ev; 
    }
    
    public String NormSalon (String s){
       
        String sa = "";
        
        if ("1".equals(s)) {
            sa = "Florida&nbsp;2&nbsp;Piso";
        }

        if ("2".equals(s)) {
            sa = "Forida&nbsp;6&nbsp;Piso";
        }      
        
        if ("3".equals(s)) {
            sa = "Costanera&nbsp;Olivos";
        }  
        
        if ("4".equals(s)) {
            sa = "Social&nbsp;Olivos";
        }  
  
        if ("5".equals(s)) {
            sa = "Chalet&nbsp;Olivos";
        }         
        
        if ("6".equals(s)) {
            sa = "Restaurant&nbsp;Olivos";
        }         

        if ("7".equals(s)) {
            sa = "Comedor&nbsp;Tigre";
        }        
        return sa; 
    }    

}
